home *** CD-ROM | disk | FTP | other *** search
- #ifndef __LANGUAGE__
- #include "Language.h"
- #endif
-
- OSErr MakeNewLanguage (SpeechInfoPtr theSpeechInfo)
- {
- OSErr theErr = noErr;
-
- /* Make language models */
- theErr = ReadInLanguages (theSpeechInfo);
-
- /* Use this LM in recognition */
- if (theErr == noErr) {
- theErr = SRSetLanguageModel (theSpeechInfo->theRecognizer, theSpeechInfo->languages->theLanguage);
- }
-
- return theErr;
- }
-
- OSErr ReadInLanguages (SpeechInfoPtr theSpeechInfo)
- {
- LanguageModelListPtr currentLang = nil;
- short numLanguages = 1;
- OSErr theErr = noErr;
-
- theSpeechInfo->languages = (LanguageModelListPtr)NewPtr (sizeof (LanguageModelList));
- theSpeechInfo->languages->nextLanguage = nil;
- currentLang = theSpeechInfo->languages;
-
- theErr = AddStringsToLanguage (theSpeechInfo, currentLang, kBaseResID);
- return theErr;
- }
-
- OSErr AddStringsToLanguage (SpeechInfoPtr theSpeechInfo, LanguageModelListPtr currentLang, short resID)
- {
- SRLanguageModel newModel;
- OSType type = 0;
- TREEResourcePtr TREEResPtr = nil;
- CommandPtr theCommand = nil;
- long refCon = 0,
- flags = 0,
- ID = 0;
- short j = 1,
- onlySubPath = false;
- OSErr theErr = noErr;
- Boolean done = false;
-
- theErr = SRNewLanguageModel (theSpeechInfo->recogSystem, &newModel, nil, 0);
- refCon = 'hex ';
- theErr = SRSetProperty (newModel, kSRRefCon, &refCon, sizeof (refCon));
- /* add each phrase to LM */
- refCon = refCon << 16;
-
- theErr = RegisterCommand (newModel, 0, 'hexd', 0, "digit zero");
- theErr = RegisterCommand (newModel, 0, 'hexd', 1, "digit one");
- theErr = RegisterCommand (newModel, 0, 'hexd', 2, "digit two");
- theErr = RegisterCommand (newModel, 0, 'hexd', 3, "digit three");
- theErr = RegisterCommand (newModel, 0, 'hexd', 4, "digit four");
- theErr = RegisterCommand (newModel, 0, 'hexd', 5, "digit five");
- theErr = RegisterCommand (newModel, 0, 'hexd', 6, "digit six");
- theErr = RegisterCommand (newModel, 0, 'hexd', 7, "digit seven");
- theErr = RegisterCommand (newModel, 0, 'hexd', 8, "digit eight");
- theErr = RegisterCommand (newModel, 0, 'hexd', 9, "digit niner");
- theErr = RegisterCommand (newModel, 0, 'hexd', 10, "digit alfa");
- theErr = RegisterCommand (newModel, 0, 'hexd', 11, "digit bravo");
- theErr = RegisterCommand (newModel, 0, 'hexd', 12, "digit charlie");
- theErr = RegisterCommand (newModel, 0, 'hexd', 13, "digit delta");
- theErr = RegisterCommand (newModel, 0, 'hexd', 14, "digit echo");
- theErr = RegisterCommand (newModel, 0, 'hexd', 15, "digit foxtrot");
-
- if (theErr != noErr) { /* release newly created LM if an error occured while adding phrases */
- SRReleaseObject (newModel);
- }
- else { /* return new LM */
- //We don't release the language models because we will be switching between them later
- currentLang->theLanguage = newModel;
- }
-
- return theErr;
- }
-
- OSErr RegisterCommand (SRLanguageModel theModel, long flags, unsigned long type, long ID, const char* word)
- {
- OSErr theErr = noErr;
-
- CommandPtr theCommand = (CommandPtr)NewPtr (sizeof(Command));
-
- theCommand->flags = flags;
- theCommand->type = type;
- theCommand->ID = ID;
-
- theErr = SRAddText (theModel, word, strlen(word), (long)theCommand);
-
- return theErr;
- }
-
-